home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 December / PCWorld_2004-12_cd.bin / software / temacd / tiny / tf6pro-6[1].0.140.exe / Tiny Firewall Pro 6.0.msi / ws_misc.js < prev    next >
Encoding:
JavaScript  |  2004-08-06  |  44.3 KB  |  1,681 lines

  1. /*//////////////////////////////////////////////////////////////////////
  2. filename:         ws_misc.js
  3. copyright(c):     2002, 2003 Tiny Software Inc (http://www.tinysoftware.com)
  4. author:         Martin Navratil (mnavratil@tinysoftware.com)
  5. product:         Tiny Personal Firewall 5.x
  6. description:     javascript functions for ws_misc.html
  7. ///////////////////////////////////////////////////////////////////////*/
  8. var    ERR_GET_MODULE_PARSER = "Error: Cannot get Parser object for Sandbox",
  9.     ERR_GET_RULELIST = "Error: Cannot get rule list from parser",
  10.     THIS_DIV = "misc",
  11.     HTML_THIS_DIV_HEADER = '<DIV id=' + THIS_DIV + '>',
  12.     HTML_THIS_DIV_TRAILER = "</DIV>",
  13.      HTML_TABLE_HEADER = '<table border="1" align="center" cellpadding=5 cellspacing=0 bordercolor="#000000" bgcolor="#E7EFF7">',
  14.     HTML_TABLE_TRAILER = "</table>",
  15.     HTML_TABLE_LABEL_HEADER1 = "<table width=100% border=0 cellspacing=0 cellpadding=0><tr bgcolor=",
  16.     HTML_TABLE_LABEL_HEADER2 = "><td height=25 align=middle><font color=white><B>",
  17.     HTML_TABLE_LABEL_TRAILER = "</B></font></td></tr></table>",
  18.     HTML_TABLES_SEPARATOR = "<BR/><BR/>"
  19.     HTML_ROW_HEADER = '<TR height="40">',
  20.     HTML_SYSTEM_ROW_HEADER = '<TR height="40" bgcolor="#f2f2f2">',
  21.     HTML_ROW_TRAILER = "</TR>",
  22.     HTML_HEADER_HEADER = '<TH style="font-face:bold;font-size:8pt;">',
  23.     HTML_HEADER_TRAILER = "</TH>",
  24.     HTML_CELL_HEADER = "<TD align=center>",
  25.     HTML_CELL_TRAILER = "</TD>",
  26.     HTML_ID_EDIT_HEADER = '<INPUT type=edit size=3 ',
  27.     HTML_ID_EDIT_TRAILER = '></INPUT>',
  28.     HTML_ID_LINK_HEADER = '<A href=# ',
  29.     HTML_ID_LINK_TRAILER = '</A>',
  30.     HTML_INSERT_USER_RULE = '<IMG src="ico-plus.gif" align=absMiddle alt = "Rule for non-system processes"/>  Rule for non-system apps',
  31.     HTML_INSERT_SYSTEM_RULE = '<IMG src="ico-plus.gif" align=absMiddle alt = "Rule for system processes"/>  Rule for system apps',
  32.     HTML_ADD_EXISTING = '<IMG src="ico-plus.gif" align=absMiddle alt = "Add existing rule"/>Add existing rule',
  33.     HTML_ICO_MINUS = '<IMG src="ico-minus.gif" alt="Delete rule"/>',
  34.     HTML_SELECT_HEADER = '<SELECT ',
  35.     HTML_SELECT_TRAILER = '></SELECT>',
  36.     HTML_OPTION_HEADER = '<OPTION value="',
  37.     HTML_OPTION_TRAILER = '</OPTION>';
  38.     HTML_DISABLED = 'disabled';
  39.  
  40. var    NO_COLUMNS = 9;
  41.  
  42. var    TXT_PRO_HIGH_MASTER = "High Priority List - Common rules",
  43.     TXT_CLIENT = "Medium Priority List - Non-Privileged User Defined",
  44.     TXT_PRO_LOW_MASTER = "Low Priority List - Common rules",
  45.     TXT_DELETING = "Deleting rule",
  46.     TXT_QST_REALLYDELETE1 = 'Do you really want to delete ',
  47.     TXT_QST_REALLYDELETE2 = ' from the list of rules?',
  48.     TXT_NEW_EXC_APP = 'Enter app./group',
  49.     
  50. // columns
  51.     TXT_ID_CAPTION = "Rule #",
  52.     TXT_APP_CAPTION = "Application to trigger the rule",
  53.     TXT_VBA_MACR = "VBA Macro",
  54.     TXT_VBA_AUTO = "VBA Auto Macro",
  55.     TXT_SYS_FPTT = "Forced proc./<br>thread termination",
  56.     TXT_SYS_SSHD = "System shutdown",
  57.     TXT_SYS_SSOS = "Set object security",
  58.     TXT_SYS_SIJC = "Inject code",
  59.     TXT_SYS_SASP = "Acquire system privileges",
  60.     TXT_SYS_SLLA = "System low level api",
  61.     TXT_SYS_CBAC = "Clipboard access",
  62.     TXT_DEV_DANG = "Dangerous device access",
  63.     TXT_ASGNMT = ((iContext || iManaged) ? "Assignment" : "Users"),
  64.     TXT_ALLUSERS = "All Users (*)",
  65.     TXT_SAFETOINJECT = "Select dlls (groups) which bypass the Inject code restrictions";
  66.     
  67. var    arrAccessResultStrings = new Array("Prevent", "Allow", "Ask User");
  68. var    arrAuditLevelStrings = new Array("Ignore", "Monitor", "Alert");
  69. var    arrVBAOptions = new Array("Inherit from parent", "Use custom settings",
  70.                     "Do not run macro");
  71. var    arrGuardIds = new Array('V'.charCodeAt(0), 'Y'.charCodeAt(0), 'G'.charCodeAt(0)),
  72.     strDisabled = new Array(3);
  73.  
  74. var    AR_ALLOW = 0x0001,
  75.     AR_PREVENT = 0x0000,
  76.     AR_ASKUSER = 0x0002;
  77.  
  78. var    AL_IGNORE = 0x0000,
  79.     AL_MONITOR = 0x0001,
  80.     AL_ALERT = 0x0002;
  81.  
  82. var    OT_VBAMACRO =     0x00000020,
  83.     OT_SYSTEMPRIV =    0x00000080,
  84.     OT_DEVICEPRIV =    0x00000100;
  85.  
  86. var     PRIOR_LOW = 0,
  87.     PRIOR_NORMAL = 1,
  88.     PRIOR_HIGH = 2;
  89.  
  90. var    RT_DIRECT    = 0,
  91.     RT_DEFINITION    = RT_DIRECT + 1;
  92.  
  93. var    AT_VBA_MACRO_RUN_IN_ORIG = 0x00000001,
  94.     AT_VBA_MACRO_RUN_IN_SPECIAL = 0x00000002,
  95.     AT_VBA_AUTO_RUN_IN_ORIG = 0x00000004,
  96.     AT_VBA_AUTO_RUN_IN_SPECIAL = 0x00000008,
  97.     AT_VBA_FULL = 0x00000005,
  98.  
  99.     AT_SYSPRIV_FORCED_PROC_THREAD_TERM = 0x00002000,
  100.     AT_SYSPRIV_SYSTEMSHUTDOWN = 0x00000100,
  101. //    AT_SYSPRIV_SYSTEMLOWLEVELAPI = 0x00001000,
  102.     AT_SYSPRIV_SETOBJSECURITY = 0x00000200,
  103.     AT_SYSPRIV_INJECTCODE = 0x00001000,
  104.     AT_SYSPRIV_ACQUIRESYSPRIV = 0x00008000,
  105.     AT_SYSPRIV_CLIPBOARDACCESS = 0x00004000,
  106.     AT_SYSPRIV_ALL = 0x0000F300,
  107.  
  108.     AT_DEVPRIV_DANGEROUSDEVICEACCESS = 0x00000002;
  109.  
  110. var iLastIndex = -1;
  111.  
  112. var    iShowAdvRules = chkShowObjects.checked ? 0 : 4;
  113.  
  114. var arrARImgSrc = new Array(),
  115.     arrALImgSrc = new Array(),
  116.     arrARTitles = new Array(),
  117.     arrALTitles = new Array();
  118.     
  119. arrARImgSrc[AR_ALLOW] = "allow.gif";
  120. arrARImgSrc[AR_PREVENT] = "prevent.gif";
  121. arrARImgSrc[AR_ASKUSER] = "askuser.gif";
  122.  
  123. arrALImgSrc[AL_IGNORE] = "ignore.gif";
  124. arrALImgSrc[AL_MONITOR] = "monitor.gif";
  125. arrALImgSrc[AL_ALERT] = "alert.gif";
  126.  
  127. arrARTitles[AR_ALLOW] = "Allow";
  128. arrARTitles[AR_PREVENT] = "Prevent";
  129. arrARTitles[AR_ASKUSER] = "Ask User";
  130.  
  131. arrALTitles[AL_IGNORE] = "Ignore";
  132. arrALTitles[AL_MONITOR] = "Monitor";
  133. arrALTitles[AL_ALERT] = "Alert";
  134.  
  135. var arrLinksApp = new Array();
  136.  
  137. var    VbaAccessTypes = new Array(4);
  138. VbaAccessTypes[0] = AT_VBA_MACRO_RUN_IN_ORIG;
  139. VbaAccessTypes[1] = AT_VBA_MACRO_RUN_IN_SPECIAL;
  140. VbaAccessTypes[2] = AT_VBA_AUTO_RUN_IN_ORIG;
  141. VbaAccessTypes[3] = AT_VBA_AUTO_RUN_IN_SPECIAL;
  142.  
  143. var    SysprivAccessTypes = new Array(6);
  144. SysprivAccessTypes[0] = AT_SYSPRIV_FORCED_PROC_THREAD_TERM;
  145. SysprivAccessTypes[1] = AT_SYSPRIV_SYSTEMSHUTDOWN;
  146. SysprivAccessTypes[2] = AT_SYSPRIV_SETOBJSECURITY;
  147. SysprivAccessTypes[3] = AT_SYSPRIV_INJECTCODE;
  148. SysprivAccessTypes[4] = AT_SYSPRIV_ACQUIRESYSPRIV;
  149. SysprivAccessTypes[5] = AT_SYSPRIV_CLIPBOARDACCESS;
  150.  
  151. var strHeaders = new Array(NO_COLUMNS);
  152. strHeaders[0] = TXT_ID_CAPTION;
  153. strHeaders[1] = TXT_APP_CAPTION;
  154. strHeaders[2] = TXT_SYS_FPTT;
  155. strHeaders[3] = TXT_SYS_SSHD;
  156. strHeaders[4] = TXT_SYS_SSOS;
  157. strHeaders[5] = TXT_SYS_SIJC;
  158. strHeaders[6] = TXT_SYS_SASP;
  159. strHeaders[7] = TXT_SYS_CBAC;
  160. strHeaders[8] = TXT_ASGNMT;
  161.  
  162.  
  163. var     arrAllClientRules = null,    // all VBA, SysPrio, DevPrio rules from Client db
  164.     arrAllServerRules = null,        // dtto. from server db
  165.     arrRuleTriples;            // rule triples from both dbs grouped by app/group 
  166. var ClientRuleList, ServerRuleList;
  167.  
  168. var     firstLabel = new Array(),
  169.     arrLabelTypes = new Array();
  170.  
  171. var iMaxServerId = 0, iMaxClientId = 0;
  172.  
  173. //function SetAssignment(str)
  174. //{
  175. //    strAsgnmt = str;
  176. //    _ruleList.innerHTML = GetRuleList();
  177. //}
  178.  
  179. function RuleTriple(r1, r2, r3)
  180. {
  181.     this[0] = r1;
  182.     this[1] = r2;
  183.     this[2] = r3;
  184. }
  185.  
  186. function LoadAllRules(ruleList, arrRulesToStore)
  187. {
  188.     var i, j, maxId = 0;
  189.     ruleListEnum = new Enumerator(ruleList);
  190.     ruleListEnum.moveFirst();
  191.     j = arrRulesToStore.length;
  192.        while (!ruleListEnum.atEnd())
  193.        {
  194.         //add option to array
  195.         var rule = ruleListEnum.item();
  196.  
  197.         var id;
  198.         var curOT = rule.ObjectType;
  199.         if (curOT == OT_VBAMACRO || curOT == OT_SYSTEMPRIV || curOT == OT_DEVICEPRIV)
  200.         {
  201.             id = GetRuleID(rule);
  202.             if (id > maxId)
  203.                 maxId = id;
  204.  
  205. // find 'full' access type, convert it into specific access types
  206.             var adList = rule.AccessDescriptorList;
  207.             var adEnum = new Enumerator(adList);
  208.             adEnum.moveFirst();
  209.             var accessDescriptor = null;
  210.             if (!adEnum.atEnd())
  211.             {
  212.                 var acCur = adEnum.item();
  213.                 switch(curOT)
  214.                 {
  215.                 case OT_VBAMACRO:
  216.                     if (acCur.AccessType == AT_VBA_FULL)
  217.                     {
  218.                         adList.Clear();
  219.                         for (i = 0; i < 4; i++)
  220.                         {
  221.                             var ad = adList.CreateAccessDescriptor();
  222.                             ad.AccessType = VbaAccessTypes[i];
  223.                             ad.AccessResult = acCur.AccessResult;
  224.                             ad.AuditLevel = acCur.AuditLevel;
  225.                             adList.Insert(ad);
  226.                         }
  227.                     }
  228.                     break;
  229.                 case OT_SYSTEMPRIV:
  230.                     if (acCur.AccessType == AT_SYSPRIV_ALL)
  231.                     {
  232.                         adList.Clear();
  233.                         for (i = 0; i < 6; i++)
  234.                         {
  235.                             var ad = adList.CreateAccessDescriptor();
  236.                             ad.AccessType = SysprivAccessTypes[i];
  237.                             ad.AccessResult = acCur.AccessResult;
  238.                             ad.AuditLevel = acCur.AuditLevel;
  239.                             adList.Insert(ad);
  240.                         }
  241.                     }
  242.                     break;
  243.                 }
  244.             }
  245.  
  246.             arrRulesToStore[j++] = rule;
  247.         }
  248.           ruleListEnum.moveNext();                 //Get next rule
  249.        }
  250.     return maxId;
  251. }
  252.  
  253. function GetRuleList()
  254. {
  255.     var Option, OptList, strRules = HTML_THIS_DIV_HEADER;
  256.     
  257.     iShowAdvRules = chkShowObjects.checked ? 0 : 4;
  258.     
  259.     if (iContext)
  260.         iManaged = 1;
  261.  
  262.     if (iContext == 0)
  263.         strAsgnmt = window.external.LoggedUser;
  264.  
  265.     try
  266.     {
  267.         if (ServerParser != null)
  268.             ServerRuleList = ServerParser.RuleList;
  269.         if (ClientParser != null)
  270.             ClientRuleList = ClientParser.RuleList;
  271.     } catch(e)
  272.     {
  273.         alert(ERR_GET_RULELIST);
  274.         return;
  275.     }
  276.  
  277.     arrAllClientRules = new Array();
  278.     arrAllServerRules = new Array();
  279.     arrRuleTriples = new Array();
  280.  
  281.     if ((iContext == 0 && iManaged == 1) || !bIsAdmin)
  282.     {
  283.         strDisabled[PRIOR_HIGH] = HTML_DISABLED;
  284.         strDisabled[PRIOR_LOW] = HTML_DISABLED;
  285.     }
  286.     else
  287.     {
  288.         strDisabled[PRIOR_HIGH] = '';
  289.         strDisabled[PRIOR_LOW] = '';
  290.     }
  291.     
  292.     strDisabled[PRIOR_NORMAL] = "";
  293.  
  294.     if (ClientRuleList)
  295.         iMaxClientId = LoadAllRules(ClientRuleList, arrAllClientRules);
  296.     if (ServerRuleList)
  297.         iMaxServerId = LoadAllRules(ServerRuleList, arrAllServerRules);
  298.     
  299.     if (ServerRuleList != null && (iShowAdvRules == 0 || iShowAdvRules == 2 || iShowAdvRules == 3))
  300.     {
  301.         strRules = HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_HIGH_MASTER + HTML_TABLE_LABEL_TRAILER;
  302.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_HIGH, "Server")
  303.                 + HTML_TABLES_SEPARATOR;
  304.     }
  305.  
  306.     if (ClientRuleList != null && (iShowAdvRules == 0 || iShowAdvRules == 1))
  307.     {
  308.         strRules += HTML_TABLE_LABEL_HEADER1 + "#7aa1e6" + HTML_TABLE_LABEL_HEADER2 + TXT_CLIENT + HTML_TABLE_LABEL_TRAILER;
  309.         strRules += GetRuleListByPriority(arrAllClientRules, PRIOR_NORMAL, "Client")
  310.             + HTML_TABLES_SEPARATOR;
  311.     }
  312.  
  313.     if (ServerRuleList != null && (iShowAdvRules == 0 || iShowAdvRules == 2 || iShowAdvRules == 4))
  314.     {
  315.         strRules += HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_LOW_MASTER + HTML_TABLE_LABEL_TRAILER;
  316.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_LOW, "Server")
  317.     }
  318.  
  319.     if (ServerRuleList != null && (iShowAdvRules == 0 || iShowAdvRules == 2 || iShowAdvRules == 4))
  320.     {
  321.         strRules += "<br><br>" + TXT_SAFETOINJECT + "  ";
  322.         var option;
  323.         try
  324.         {
  325.             option = ServerParser.GlobalOptions.Get("SafeToInjectDllGroup")
  326.         }
  327.         catch (e)
  328.         {
  329.             option = ServerParser.GlobalOptions.CreateProperty();
  330.             option.PropertyID = "SafeToInjectDllGroup";
  331.             ServerParser.GlobalOptions.Insert(option);
  332.         }
  333.         strRules += GetDllGroupListHtmlStr( PRIOR_LOW, RA_USER, "SELECT_safegroups", option.Value, 0, strDisabled[PRIOR_LOW]);
  334.     }
  335.  
  336.     strRules += HTML_THIS_DIV_TRAILER;
  337.     return strRules;
  338. }
  339.  
  340. function OnDllGroupChange( prio, elem, index, value)
  341. {
  342.     ServerParser.GlobalOptions.Get("SafeToInjectDllGroup").Value = value;
  343. }
  344. function GetRuleListByPriority(arrAllRules, prio, ParserName)
  345. {
  346.     var strRetVal = '<table width="350" border="0" bgcolor="#E7EFF7"><tr><td width=200>';
  347.     strRetVal += '<A href="#" style="color: Black; text-decoration: none;" ' + strDisabled[prio];
  348.     if (strDisabled[prio] == '')
  349.         strRetVal += 'onclick="OnAdd(' + prio + ',0)"';
  350.     strRetVal += '>' + HTML_INSERT_USER_RULE + '</A></td>';
  351.     if (PRIOR_NORMAL != prio)
  352.     {
  353.         strRetVal += '<td width=175>';
  354.         strRetVal += '<A href="#" style="color: Black; text-decoration: none;" ' + strDisabled[prio];
  355.         if (strDisabled[prio] == '')
  356.             strRetVal += 'onclick="OnAdd(' + prio + ',1)"';
  357.         strRetVal += '>' + HTML_INSERT_SYSTEM_RULE + '</A></td>';
  358.         strRetVal += '</td>';
  359.     }
  360.     strRetVal += '</tr></table>';
  361.     var i;
  362.  
  363.     strRetVal += HTML_TABLE_HEADER;
  364.  
  365.     strRetVal += HTML_ROW_HEADER;
  366.     for (i = 0; i < NO_COLUMNS; i++) {
  367.         strRetVal += HTML_HEADER_HEADER + strHeaders[i] + HTML_HEADER_TRAILER;
  368.     }
  369.     strRetVal += HTML_ROW_TRAILER;
  370.  
  371.     j = arrRuleTriples.length;
  372.     for (i = 0; i < arrAllRules.length; i++)
  373.     {
  374.         var rule = arrAllRules[i];
  375.         var ot = rule.ObjectType
  376.         if (!RuleTripleExists(rule) && 
  377.             (ot == OT_VBAMACRO || ot == OT_SYSTEMPRIV || ot == OT_DEVICEPRIV)
  378.             && rule.Priority == prio)
  379.         {
  380.             var ruleTriple;
  381.             switch (ot)
  382.             {
  383.             case OT_VBAMACRO:
  384.                 ruleTriple = new RuleTriple(rule, 
  385.                             GetSysPrioRule(rule, arrAllRules),
  386.                             GetDevPrioRule(rule, arrAllRules)
  387.                             );
  388.                 break;
  389.             case OT_SYSTEMPRIV:
  390.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  391.                             rule, 
  392.                             GetDevPrioRule(rule, arrAllRules)
  393.                             );
  394.                 break;
  395.             case OT_DEVICEPRIV:
  396.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  397.                             GetSysPrioRule(rule, arrAllRules),
  398.                             rule
  399.                             );
  400.                 break;
  401.             }
  402.             if (RuleTripleContainsRule(ruleTriple))
  403.             {
  404.                 arrRuleTriples[j++] = ruleTriple;
  405.                 strRetVal += GetRuleHtmlStr(ruleTriple, prio, arrRuleTriples.length - 1);
  406.             }
  407.         }
  408.        }
  409.     strRetVal += HTML_TABLE_TRAILER;
  410.     return strRetVal;
  411. }
  412.  
  413. function RuleTripleContainsRule(ruleTriple)
  414. {
  415.     var i;
  416.     for (i = 0; i < 3; i++)
  417.         if (ruleTriple[i] != null)
  418.             return 1;
  419.     return 0;
  420. }
  421.  
  422. function GetApplication(ruleTriple)
  423. {
  424.     var i;
  425.     for (i = 0; i < 3; i++)
  426.         if (ruleTriple[i] != null)
  427.             return ruleTriple[i].Application;
  428. }
  429.  
  430. function GetPriority(ruleTriple)
  431. {
  432.     var i;
  433.     for (i = 0; i < 3; i++)
  434.         if (ruleTriple[i] != null)
  435.             return ruleTriple[i].Priority;
  436. }
  437.  
  438. function GetRuleAccount(ruleTriple)
  439. {
  440.     var i;
  441.     for (i = 0; i < 3; i++)
  442.         if (ruleTriple[i] != null)
  443.             return ruleTriple[i].Account;
  444. }
  445.  
  446. function GetRuleID(rule)
  447. {
  448.     return rule.RuleID & 0x0000ffff;
  449. }
  450.  
  451. function GetRuleTripleID(ruleTriple)
  452. {
  453.     var i;
  454.     for (i = 0; i < 3; i++)
  455.         if (ruleTriple[i] != null)
  456.         {
  457.             return ruleTriple[i].RuleID & 0x0000ffff;
  458.         }
  459. }
  460.  
  461. function GetAssignment(ruleTriple)
  462. {
  463.     var i;
  464.     for (i = 0; i < 3; i++)
  465.         if (ruleTriple[i] != null)
  466.         {
  467.             return ruleTriple[i].Assignment;
  468.         }
  469. }
  470.  
  471. function GetRuleHtmlStr(ruleTriple, prio, index)
  472. {
  473.     var strRule;
  474.     if (RA_SYSTEM == GetRuleAccount(ruleTriple))
  475.         strRule = HTML_SYSTEM_ROW_HEADER;
  476.     else
  477.         strRule = HTML_ROW_HEADER;
  478.         
  479.     if (!RuleTripleContainsRule(ruleTriple))
  480.         return "";
  481.  
  482.     var ruleAsgnmt = GetAssignment(ruleTriple);
  483.     var ruleAccount = GetRuleAccount(ruleTriple);
  484.  
  485.     switch (iContext)
  486.     {
  487.     case 0:
  488.         ruleAsgnmt = ruleAsgnmt.toLowerCase( );
  489.         if (ruleAsgnmt != "*" && strAsgnmt != TXT_ALLUSERS && 
  490.                 ruleAsgnmt.indexOf(strAsgnmt.toLowerCase( )) == -1)
  491.         {
  492.             return "";
  493.         }
  494.         break;
  495.     case 1:
  496.         if (!ctrlAsgnmt.CheckRule(ruleAsgnmt))
  497.         {
  498.             return "";
  499.         }
  500.         break;
  501.     }
  502.  
  503.     var strID = GetRuleTripleID(ruleTriple);
  504.     strRule += HTML_CELL_HEADER + strID + HTML_CELL_TRAILER;
  505.  
  506.     var strAppName = GetApplication(ruleTriple);
  507.     var i;
  508.  
  509.     if (strAppName == '')
  510.     {
  511.         ChangeApplication(ruleTriple, '*');
  512.         if (RA_SYSTEM == ruleAccount)
  513.             strAppName = STR_ALL_SYSTEM;
  514.         else
  515.             strAppName = STR_ALL_NONSYSTEM;
  516.         strRule += HTML_CELL_HEADER + 
  517.             GetLabelListHtmlStr(prio, ruleAccount, 'SELECT_' + index, '*', index) +
  518.             HTML_CELL_TRAILER;
  519.     } else
  520.     {
  521.         strRule += HTML_CELL_HEADER;
  522.         var strLinkApp = HTML_ID_LINK_HEADER;
  523.         strLinkApp += 'id="app_' + index + '"';
  524.         strLinkApp += ' onclick= ';
  525.         if (strAppName == '*')
  526.         {
  527.             if (RA_SYSTEM == ruleAccount)
  528.                 strAppName = STR_ALL_SYSTEM;
  529.             else
  530.                 strAppName = STR_ALL_NONSYSTEM;
  531.         }
  532.         if (strDisabled[prio] == "")
  533.             strLinkApp += 
  534.                 '\'AppComboCleanup('+index+');this.outerHTML=GetLabelListHtmlStr(' + prio + ',' + ruleAccount + ',"SELECT_' + index + 
  535.                 '","' + strAppName + '",' + index +');\' ';
  536.         else
  537.             strLinkApp += '"" ';
  538.         strLinkApp += strDisabled[prio] + '>' + strAppName + HTML_ID_LINK_TRAILER;
  539.         arrLinksApp[index] = strLinkApp;
  540.         strRule += strLinkApp + HTML_CELL_TRAILER;
  541.     }
  542.  
  543. //    for (i = 0; i < 3; i++)            // VBA macros and Device Privileges are disabled
  544.     for (i = 1; i < 2; i++)
  545.     {
  546.         var AccessType, j;
  547.         switch (i)
  548.         {
  549.         case 0:        // VBA_macro:
  550.             strRule += 
  551.               HTML_CELL_HEADER + GenerateVBAAccessResult(ruleTriple[i], prio, 1,
  552.               '"OnVBAAccessResultChange(' + index + ',1,parseInt(this.value),' + prio +')"');
  553.                 strRule +=  "  " + GenerateVBAAuditLevel(ruleTriple[i], prio, 1,
  554.               '"OnVBAAuditLevelChange(' + index + ',1,parseInt(this.value),' + prio +')"') + HTML_CELL_TRAILER;
  555.             strRule += 
  556.               HTML_CELL_HEADER + GenerateVBAAccessResult(ruleTriple[i], prio, 0,
  557.               '"OnVBAAccessResultChange(' + index + ',0,parseInt(this.value),' + prio +')"');
  558.                 strRule += "  " + GenerateVBAAuditLevel(ruleTriple[i], prio, 0,
  559.               '"OnVBAAuditLevelChange(' + index + ',0,parseInt(this.value),' + prio +')"') + HTML_CELL_TRAILER;
  560.             break;
  561.         case 1:        // System privileges
  562.             for (j = 0; j < 6; j++)
  563.             {
  564.                 strRule += 
  565.               HTML_CELL_HEADER + GenerateAccessResult(ruleTriple[i], prio, SysprivAccessTypes[j],
  566.               '"OnAccessResultRotate(' + index + ',' + i + ',' + SysprivAccessTypes[j] + ',' + 
  567.               'this,' + prio + ')"');
  568.  
  569.                 strRule += "  " + GenerateAuditLevel(ruleTriple[i], prio, SysprivAccessTypes[j],
  570.                 '"OnAuditLevelRotate(' + index + ',' + i + ',' + SysprivAccessTypes[j] + ',' + 
  571.                 'this,' + prio + ')"') + HTML_CELL_TRAILER;
  572.             }
  573.             break;
  574.         case 2:        // Device privilege
  575.             strRule += 
  576.               HTML_CELL_HEADER + GenerateAccessResult(ruleTriple[i], prio, AT_DEVPRIV_DANGEROUSDEVICEACCESS, 
  577.               '"OnAccessResultRotate(' + index + ',' + i + ',' + AT_DEVPRIV_DANGEROUSDEVICEACCESS + ',' + 
  578.               'this,' + prio + ')"');
  579.             strRule += "  " + GenerateAuditLevel(ruleTriple[i], prio, AT_DEVPRIV_DANGEROUSDEVICEACCESS, 
  580.               '"OnAuditLevelRotate(' + index + ',' + i + ',' + AT_DEVPRIV_DANGEROUSDEVICEACCESS + ',' + 
  581.               'this,' + prio + ')"') + HTML_CELL_TRAILER;
  582.             break;
  583.         }
  584.     }
  585.  
  586.     if (iManaged == 0 /* Home Version  */ && prio != PRIOR_NORMAL ||
  587.         iManaged == 1 && iContext == 1 /* BBE */)
  588.     {
  589.         strRule += HTML_CELL_HEADER;
  590.         strAsgnDisabled = strDisabled[prio];
  591.         if (iProductType == 1)
  592.             strAsgnDisabled = HTML_DISABLED;
  593.         if (iManaged)
  594.         {
  595.             strRule += HTML_ID_EDIT_HEADER + ' value="' + GetAssignment(ruleTriple) + '"' + 
  596.             ' onchange="OnAsgnmtChange(' + index + ',this.value);" ' + strAsgnDisabled + HTML_ID_EDIT_TRAILER;
  597.         } else
  598.         {
  599.             strRule += HTML_ID_LINK_HEADER;
  600.             strRule += ' onclick=';
  601.             if (strAsgnDisabled == '')
  602.                 strRule += '"OnUsersChange(' + index +');"';
  603.             else
  604.                 strRule += '"" ';
  605.             strRule += strAsgnDisabled + '>' + GetAssignment(ruleTriple) + '</A>';
  606.         }
  607.         strRule += HTML_CELL_TRAILER;
  608.     }
  609.     else
  610.     {
  611.         strRule += HTML_CELL_HEADER + HTML_CELL_TRAILER;
  612.     }
  613.  
  614.     strRule += HTML_CELL_HEADER + 
  615.     '<A href="#" ' + strDisabled[prio];
  616.     if (strDisabled[prio] == "")
  617.         strRule += 'onclick="OnDelete(' + prio + ',' + index + ')"';
  618.     strRule += '>' + HTML_ICO_MINUS + HTML_CELL_TRAILER;
  619.  
  620.     strRule += HTML_ROW_TRAILER;
  621.     return strRule;
  622. }
  623.  
  624.  
  625. function RuleTripleExists(rule)
  626. {
  627.     var appRule = rule.Application;
  628.     var rulePrio = rule.Priority;
  629.     var ruleOT = rule.ObjectType;
  630.     var asgnmtRule = rule.Assignment;
  631.     var indIntoTriple;
  632.     switch (ruleOT)
  633.     {
  634.     case OT_VBAMACRO:
  635.         indIntoTriple = 0;
  636.         break;
  637.     case OT_SYSTEMPRIV:
  638.         indIntoTriple = 1;
  639.         break;
  640.     case OT_DEVICEPRIV:
  641.         indIntoTriple = 2;
  642.         break;
  643.     }
  644.     for (i = 0; i < arrRuleTriples.length; i++)
  645.     {
  646.         if (    GetPriority(arrRuleTriples[i]) == rulePrio &&
  647.             GetApplication(arrRuleTriples[i]) == appRule &&
  648.             GetAssignment(arrRuleTriples[i]) == asgnmtRule &&
  649.             arrRuleTriples[i][indIntoTriple] == rule)
  650.             return 1;
  651.     }
  652.     return 0;
  653. }
  654.  
  655.  
  656. function GetVBARule(rule, arrAllRules)
  657. {
  658.     var strApplication = rule.Application;
  659.     var ruleFound = null;
  660.     var i;
  661.  
  662.     for (i = 0; i < arrAllRules.length; i++)
  663.     {
  664.         var ruleCur = arrAllRules[i];
  665.         if (ruleCur.ObjectType == OT_VBAMACRO &&
  666.             ruleCur.Application == strApplication)
  667.         {
  668.             ruleFound = ruleCur;
  669.             break;
  670.         }
  671.     }
  672.     return ruleFound;    
  673. }
  674.  
  675. function GetSysPrioRule(rule, arrAllRules)
  676. {
  677.     var strApplication = rule.Application;
  678.     var ruleFound = null;
  679.     var i;
  680.  
  681.     for (i = 0; i < arrAllRules.length; i++)
  682.     {
  683.         var ruleCur = arrAllRules[i];
  684.         if (ruleCur.ObjectType == OT_SYSTEMPRIV &&
  685.             ruleCur.Application == strApplication)
  686.         {
  687.             ruleFound = ruleCur;
  688.             break;
  689.         }
  690.     }
  691.     return ruleFound;    
  692. }
  693.  
  694. function GetDevPrioRule(rule, arrAllRules)
  695. {
  696.     var strApplication = rule.Application;
  697.     var ruleFound = null;
  698.     var i;
  699.  
  700.     for (i = 0; i < arrAllRules.length; i++)
  701.     {
  702.         var ruleCur = arrAllRules[i];
  703.         if (ruleCur.ObjectType == OT_DEVICEPRIV &&
  704.             ruleCur.Application == strApplication)
  705.         {
  706.             ruleFound = ruleCur;
  707.             break;
  708.         }
  709.     }
  710.     return ruleFound;    
  711. }
  712.  
  713. function OnAdd(priority, account)
  714. {
  715.     var ruleList;
  716.     switch (priority)
  717.     {
  718.     case PRIOR_HIGH:
  719.     case PRIOR_LOW:
  720.         ruleList = ServerRuleList;
  721.         break;
  722.     case PRIOR_NORMAL:
  723.         ruleList = ClientRuleList;
  724.     }
  725.  
  726.     var newRule = ruleList.CreateRule();
  727.     switch (priority)
  728.     {
  729.     case PRIOR_HIGH:
  730.     case PRIOR_LOW:
  731.         SetRuleID(newRule, 1, ++iMaxServerId, 1);
  732.         break;
  733.     case PRIOR_NORMAL:
  734.         SetRuleID(newRule, 1, ++iMaxClientId, 0);
  735.     }
  736.     newRule.Application = '';
  737.     newRule.Priority = priority;
  738.     newRule.ObjectType = OT_SYSTEMPRIV;
  739.     newRule.Path = "*";
  740.     newRule.PathType = RT_DEFINITION;
  741.     newRule.Assignment = (iContext ? dhtmlctrl.Assignment : "*");
  742.     newRule.Account = account;
  743.     ruleList.Insert(newRule, newRule);
  744.     _ruleList.innerHTML = GetRuleList();
  745. }
  746.  
  747. function OnDelete(priority, index)
  748. {
  749.     var arg = new Array(2);
  750.     var i;
  751.     var strNewAsgnmt = "";
  752.     var curStrAsgnmt = (iContext ? ctrlAsgnmt.Assignment : strAsgnmt);
  753.     
  754.     if (iContext == 1 && !ctrlAsgnmt.IsEmptyOrAll(curStrAsgnmt))
  755.     {
  756.         try 
  757.         {
  758.             ruleTriple = arrRuleTriples[index];
  759.             strNewAsgnmt = ctrlAsgnmt.Remove(GetAssignment(ruleTriple));
  760.             for (i = 0; i < 3; i++)
  761.                 if (ruleTriple[i] != null)
  762.                     ruleTriple[i].Assignment = strNewAsgnmt;
  763.         } catch (e)
  764.         {
  765.             alert("Access violation");
  766.         }
  767.     }
  768.  
  769.     if (iContext == 0 || strNewAsgnmt == "")
  770.     {
  771.  
  772.         arg[0] = TXT_QST_REALLYDELETE1 + '"' + GetApplication(arrRuleTriples[index]) + '"' +
  773.             TXT_QST_REALLYDELETE2;
  774.         arg[1] = TXT_DELETING;
  775.         var answer=showModalDialog('question.html', arg, 'dialogWidth=300pt;dialogHeight=100pt;');
  776.         if (answer == 0)
  777.             return;
  778.  
  779.         var Parser;
  780.         switch (priority)
  781.         {
  782.         case PRIOR_HIGH:
  783.         case PRIOR_LOW:
  784.             ruleList = ServerRuleList;
  785.             break;
  786.         case PRIOR_NORMAL:
  787.             ruleList = ClientRuleList;
  788.             break;
  789.         }
  790.  
  791.         try 
  792.         {
  793.             ruleTriple = arrRuleTriples[index];
  794.             for (i = 0; i < 3; i++)
  795.                 if (ruleTriple[i] != null)
  796.                     ruleList.Remove(ruleTriple[i]);
  797.         } catch (e)
  798.         {
  799.             alert("Access violation");
  800.         }
  801.     }
  802.     _ruleList.innerHTML = GetRuleList();
  803. }
  804.  
  805. function OnAppChange(prio, elem, index, value)
  806. {
  807.     var i;
  808.     var ruleTriple, ruleAccount;
  809.     try
  810.     {
  811.         ruleTriple = arrRuleTriples[index];
  812.         for (i = 0; i < 3; i++)
  813.         {
  814.             if (ruleTriple[i] != null)
  815.             {
  816.                 arrRuleTriples[index][i].Application = value;
  817.                 arrRuleTriples[index][i].AppType = arrLabelTypes[value];
  818.             }
  819.         }
  820.     } catch (e)
  821.     {
  822.         alert("Access violation");
  823.     }
  824.     var strLinkApp = HTML_ID_LINK_HEADER;
  825.     strLinkApp += 'id="app_' + index + '"';
  826.     strLinkApp += ' onclick=';
  827.     ruleAccount = GetRuleAccount(ruleTriple);
  828.     if (strDisabled[prio] == "")
  829.         strLinkApp += 
  830.                 '\'AppComboCleanup('+index+');this.outerHTML=GetLabelListHtmlStr(' + prio + ',' + ruleAccount + ',"SELECT_' + index + 
  831.                 '","' + value + '",' + index +');\' ';
  832.     else
  833.         strLinkApp += '"" ';
  834.  
  835.     var strAppName = value;
  836.     
  837.     if ('*' == strAppName)
  838.     {
  839.         if (RA_SYSTEM == ruleAccount)
  840.             strAppName = STR_ALL_SYSTEM;
  841.         else
  842.             strAppName = STR_ALL_NONSYSTEM;
  843.     }
  844.  
  845.     strLinkApp += strDisabled[prio] + '>' + strAppName + HTML_ID_LINK_TRAILER;
  846.     arrLinksApp[index] = strLinkApp;
  847.     elem.outerHTML = strLinkApp;
  848. }
  849.  
  850. function AppComboCleanup(index)
  851. {
  852.     var iIndex = parseInt(index);
  853.     if (document.getElementById)
  854.     {
  855.         var combo = document.getElementById("SELECT_"+iLastIndex);
  856.         if (combo)
  857.         {
  858.             combo.outerHTML = arrLinksApp[iLastIndex];
  859.         }
  860.     }
  861.     iLastIndex = iIndex;
  862. }
  863.  
  864. function OnIDChange(index, value, priority)
  865. {
  866.     try
  867.     {
  868.         SetRuleTripleID(arrRuleTriples[index], parseInt(value), (priority==PRIOR_HIGH || priority==PRIOR_LOW) ? 1 : 0);
  869.     } catch (e)
  870.     {
  871.         alert("ID already exists");
  872.     }
  873. }
  874.  
  875. function OnAccessResultChange(index, subindex, accessType, value, prio)
  876. {
  877.     try
  878.     {
  879.         var rule = arrRuleTriples[index][subindex];
  880.         var adList;
  881.         if (rule == null)
  882.         {
  883.             rule = CreateRule(index, subindex, prio);
  884.         }
  885.         adList = rule.AccessDescriptorList;
  886.         var adEnum = new Enumerator(adList);
  887.         adEnum.moveFirst();
  888.         var accessDescriptor = null;
  889.         while (!adEnum.atEnd())
  890.         {
  891.             var acCur = adEnum.item();
  892.             if (acCur.AccessType == accessType)
  893.             {
  894.                 accessDescriptor = acCur;
  895.                 break;
  896.             }
  897.             adEnum.moveNext();
  898.         }
  899.         if (accessDescriptor == null)
  900.         {
  901.             accessDescriptor = adList.CreateAccessDescriptor();
  902.             accessDescriptor.AccessType = accessType;
  903.             accessDescriptor.AuditLevel = AL_IGNORE;
  904.             adList.Insert(accessDescriptor);
  905.         }
  906.         accessDescriptor.AccessResult = value;
  907.     } catch (e)
  908.     {
  909.         alert("Access violation");
  910.     }
  911. }
  912.  
  913. function OnAccessResultRotate(index, subindex, accessType, elem, prio)
  914. {
  915.     var arCur = -1, arNext = -1;
  916.     var src = elem.innerHTML;
  917.     var idxAllow = src.search(arrARImgSrc[AR_ALLOW]),
  918.     idxPrevent = src.search(arrARImgSrc[AR_PREVENT]),
  919.     idxAskUser = src.search(arrARImgSrc[AR_ASKUSER]);
  920.     if (idxAllow != -1)
  921.     {
  922.         arCur = AR_ALLOW;
  923.         arNext = AR_PREVENT;
  924.     } else if (idxPrevent != -1)
  925.     {
  926.         arCur = AR_PREVENT;
  927.         if (iShowAdvRules == 0 && prio == PRIOR_LOW)
  928.             arNext = AR_ASKUSER;
  929.         else
  930.             arNext = AR_ALLOW;
  931.     } else if (idxAskUser != -1)
  932.     {
  933.         arCur = AR_ASKUSER;
  934.         arNext = AR_ALLOW;
  935.     }
  936.     if (arNext != -1)
  937.     try
  938.     {
  939.         var rule = arrRuleTriples[index][subindex];
  940.         var adList;
  941.         if (rule == null)
  942.         {
  943.             rule = CreateRule(index, subindex, prio);
  944.         }
  945.         adList = rule.AccessDescriptorList;
  946.         var adEnum = new Enumerator(adList);
  947.         adEnum.moveFirst();
  948.         var accessDescriptor = null;
  949.         while (!adEnum.atEnd())
  950.         {
  951.             var acCur = adEnum.item();
  952.             if (acCur.AccessType == accessType)
  953.             {
  954.                 accessDescriptor = acCur;
  955.                 break;
  956.             }
  957.             adEnum.moveNext();
  958.         }
  959.         if (accessDescriptor == null)
  960.         {
  961.             accessDescriptor = adList.CreateAccessDescriptor();
  962.             accessDescriptor.AccessType = accessType;
  963.             accessDescriptor.AuditLevel = AL_IGNORE;
  964.             adList.Insert(accessDescriptor);
  965.         }
  966.         accessDescriptor.AccessResult = arNext;
  967.         src = src.replace(arrARImgSrc[arCur], arrARImgSrc[arNext]);
  968.         src = src.replace(arrARTitles[arCur], arrARTitles[arNext]);
  969.         elem.innerHTML = src;
  970.     } catch (e)
  971.     {
  972.         alert("Access violation");
  973.     }
  974. }
  975.  
  976. function OnVBAAccessResultChange(index, macroNotAuto, value, prio)
  977. {
  978.     try
  979.     {
  980.         var rule = arrRuleTriples[index][0];
  981.         if (rule == null)
  982.         {
  983.             rule = CreateRule(index, subindex, prio);
  984.         }
  985.         var adList = rule.AccessDescriptorList;
  986.         var adEnum = new Enumerator(adList);
  987.         adEnum.moveFirst();
  988.         var accessDescriptor = null, accessDescriptor2 = null;
  989.         while (!adEnum.atEnd())
  990. // find VBA access descriptors
  991.         {
  992.             var acCur = adEnum.item();
  993.             var atCur = acCur.AccessType;
  994.             if (macroNotAuto && (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  995.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL)
  996.             || !macroNotAuto && (    atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  997.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL)
  998.             )
  999.             {
  1000.                 accessDescriptor = acCur;
  1001.  
  1002.                 switch(value)
  1003.                 {
  1004.                 case 0:
  1005.                     acCur.AccessResult = AR_ALLOW;
  1006.                     break;
  1007.                 case 2:
  1008.                     acCur.AccessResult = AR_PREVENT;
  1009.                     break;
  1010.                 case 1:
  1011.                     if (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1012.                         atCur == AT_VBA_AUTO_RUN_IN_ORIG
  1013.                        )
  1014.                         acCur.AccessResult = AR_PREVENT;
  1015.                     else 
  1016.                         acCur.AccessResult = AR_ALLOW;
  1017.                     break;
  1018.                 }
  1019.             }
  1020.             adEnum.moveNext();
  1021.         }
  1022.         if (accessDescriptor == null)
  1023. // access descriptors for this access type do not exist yet
  1024.         {
  1025.             accessDescriptor = adList.CreateAccessDescriptor();
  1026.             accessDescriptor2 = adList.CreateAccessDescriptor();
  1027.             accessDescriptor.AuditLevel = AL_IGNORE;
  1028.             accessDescriptor2.AuditLevel = AL_IGNORE;
  1029.             if (macroNotAuto)
  1030.             {
  1031.                 accessDescriptor.AccessType = AT_VBA_MACRO_RUN_IN_ORIG;
  1032.                 accessDescriptor2.AccessType = AT_VBA_MACRO_RUN_IN_SPECIAL;
  1033.             } else
  1034.             {
  1035.                 accessDescriptor.AccessType = AT_VBA_AUTO_RUN_IN_ORIG;
  1036.                 accessDescriptor2.AccessType = AT_VBA_AUTO_RUN_IN_SPECIAL;
  1037.             }
  1038.             switch(value)
  1039.             {
  1040.             case 0:
  1041.                 accessDescriptor.AccessResult = AR_ALLOW;
  1042.                 accessDescriptor2.AccessResult = AR_ALLOW;
  1043.                 break;
  1044.             case 1:
  1045.                 accessDescriptor.AccessResult = AR_PREVENT;
  1046.                 accessDescriptor2.AccessResult = AR_ALLOW;
  1047.                 break;
  1048.             case 2:
  1049.                 accessDescriptor.AccessResult = AR_PREVENT;
  1050.                 accessDescriptor2.AccessResult = AR_PREVENT;
  1051.                 break;
  1052.             }
  1053.             adList.Insert(accessDescriptor);
  1054.             adList.Insert(accessDescriptor2);
  1055.         }
  1056.     } catch (e)
  1057.     {
  1058.         alert("Access violation");
  1059.     }
  1060. }
  1061.  
  1062. function OnAuditLevelChange(index, subindex, accessType, value, prio)
  1063. {
  1064.     try
  1065.     {
  1066.         var rule = arrRuleTriples[index][subindex];
  1067.         if (rule == null)
  1068.         {
  1069.             rule = CreateRule(index, subindex, prio);
  1070.         }
  1071.         var adList = rule.AccessDescriptorList;
  1072.         var adEnum = new Enumerator(adList);
  1073.         adEnum.moveFirst();
  1074.         var accessDescriptor = null;
  1075.         while (!adEnum.atEnd())
  1076.         {
  1077.             var acCur = adEnum.item();
  1078.             if (acCur.AccessType == accessType)
  1079.             {
  1080.                 accessDescriptor = acCur;
  1081.                 break;
  1082.             }
  1083.             adEnum.moveNext();
  1084.         }
  1085.         if (accessDescriptor == null)
  1086.         {
  1087.             accessDescriptor = adList.CreateAccessDescriptor();
  1088.             accessDescriptor.AccessType = accessType;
  1089.             accessDescriptor.AccessResult = AR_ALLOW;
  1090.             adList.Insert(accessDescriptor);
  1091.         }
  1092.         accessDescriptor.AuditLevel = value;
  1093.     } catch (e)
  1094.     {
  1095.         alert("Access violation");
  1096.     }
  1097. }
  1098.  
  1099. function OnAuditLevelRotate(index, subindex, accessType, elem, prio)
  1100. {
  1101.     var alCur = -1, alNext = -1;
  1102.     var src = elem.innerHTML;
  1103.     var idxIgnore = src.search(arrALImgSrc[AL_IGNORE]),
  1104.         idxMonitor = src.search(arrALImgSrc[AL_MONITOR]),
  1105.         idxAlert = src.search(arrALImgSrc[AL_ALERT]);
  1106.     if (idxIgnore != -1)
  1107.     {
  1108.         alCur = AL_IGNORE;
  1109.         alNext = AL_MONITOR;
  1110.     } else if (idxMonitor != -1)
  1111.     {
  1112.         alCur = AL_MONITOR;
  1113.         // do not allow Alert on System Shutdown
  1114.         if (AT_SYSPRIV_SYSTEMSHUTDOWN == accessType)
  1115.             alNext = AL_IGNORE;
  1116.         else
  1117.             alNext = AL_ALERT;
  1118.     } else if (idxAlert != -1)
  1119.     {
  1120.         alCur = AL_ALERT;
  1121.         alNext = AL_IGNORE;
  1122.     }
  1123.     if (alNext != -1)
  1124.     try
  1125.     {
  1126.         var rule = arrRuleTriples[index][subindex];
  1127.         if (rule == null)
  1128.         {
  1129.             rule = CreateRule(index, subindex, prio);
  1130.         }
  1131.         var adList = rule.AccessDescriptorList;
  1132.         var adEnum = new Enumerator(adList);
  1133.         adEnum.moveFirst();
  1134.         var accessDescriptor = null;
  1135.         while (!adEnum.atEnd())
  1136.         {
  1137.             var acCur = adEnum.item();
  1138.             if (acCur.AccessType == accessType)
  1139.             {
  1140.                 accessDescriptor = acCur;
  1141.                 break;
  1142.             }
  1143.             adEnum.moveNext();
  1144.         }
  1145.         if (accessDescriptor == null)
  1146.         {
  1147.             accessDescriptor = adList.CreateAccessDescriptor();
  1148.             accessDescriptor.AccessType = accessType;
  1149.             accessDescriptor.AccessResult = AR_ALLOW;
  1150.             adList.Insert(accessDescriptor);
  1151.         }
  1152.         accessDescriptor.AuditLevel = alNext;
  1153.         src = src.replace(arrALImgSrc[alCur], arrALImgSrc[alNext]);
  1154.         src = src.replace(arrALTitles[alCur], arrALTitles[alNext]);
  1155.         elem.innerHTML = src;
  1156.     } catch (e)
  1157.     {
  1158.         alert("Access violation");
  1159.     }
  1160. }
  1161.  
  1162. function OnVBAAuditLevelChange(index, macroNotAuto, value, prio)
  1163. {
  1164.     try
  1165.     {
  1166.         var rule = arrRuleTriples[index][0];
  1167.         if (rule == null)
  1168.         {
  1169.             rule = CreateRule(index, subindex, prio);
  1170.         }
  1171.         var adList = rule.AccessDescriptorList;
  1172.         var adEnum = new Enumerator(adList);
  1173.         adEnum.moveFirst();
  1174.         var accessDescriptor = null, accessDescriptor2 = null;
  1175.         while (!adEnum.atEnd())
  1176. // find VBA access descriptors
  1177.         {
  1178.             var acCur = adEnum.item();
  1179.             var atCur = acCur.AccessType;
  1180.             if (macroNotAuto && (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1181.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL)
  1182.             || !macroNotAuto && (    atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  1183.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL)
  1184.             )
  1185.             {
  1186.                 accessDescriptor = acCur;
  1187.                 acCur.AuditLevel = value;
  1188.             }
  1189.             adEnum.moveNext();
  1190.         }
  1191.         if (accessDescriptor == null)
  1192. // access descriptors for this access type do not exist yet
  1193.         {
  1194.             accessDescriptor = adList.CreateAccessDescriptor();
  1195.             accessDescriptor2 = adList.CreateAccessDescriptor();
  1196.             accessDescriptor.AccessResult = AR_ALLOW;
  1197.             accessDescriptor2.AccessResult = AR_ALLOW;
  1198.             accessDescriptor.AuditLevel = value;
  1199.             accessDescriptor2.AuditLevel = value;
  1200.  
  1201.             if (macroNotAuto)
  1202.             {
  1203.                 accessDescriptor.AccessType = AT_VBA_MACRO_RUN_IN_ORIG;
  1204.                 adList.Insert(accessDescriptor);
  1205.                 accessDescriptor2.AccessType = AT_VBA_MACRO_RUN_IN_SPECIAL;
  1206.                 adList.Insert(accessDescriptor2);
  1207.             } else
  1208.             {
  1209.                 accessDescriptor.AccessType = atCur == AT_VBA_AUTO_RUN_IN_ORIG;
  1210.                 adList.Insert(accessDescriptor);
  1211.                 accessDescriptor2.AccessType = AT_VBA_AUTO_RUN_IN_SPECIAL;
  1212.                 adList.Insert(accessDescriptor2);
  1213.             }
  1214.         }
  1215.     } catch (e)
  1216.     {
  1217.         alert("Access violation");
  1218.     }
  1219. }
  1220.  
  1221. function OnUsersChange(index)
  1222. {
  1223.     var ruleTriple = arrRuleTriples[index];
  1224.     var strNewUsers = showModalDialog('UsersDlg.html', new Array(GetAssignment(ruleTriple)), 'dialogWidth=215pt;dialogHeight=200pt;');
  1225.     try
  1226.     {
  1227.         var i;
  1228.         for (i = 0; i < 3; i++)
  1229.             if (ruleTriple[i] != null)
  1230.                 ruleTriple[i].Assignment = strNewUsers;
  1231.         _ruleList.innerHTML = GetRuleList();
  1232.     } catch (e)
  1233.     {
  1234.         alert("Access violation");
  1235.     }
  1236. }
  1237.  
  1238. function OnAsgnmtChange(index, newVal)
  1239. {
  1240.     try
  1241.     {
  1242.         var ruleTriple = arrRuleTriples[index];
  1243.         var i;
  1244.         for (i = 0; i < 3; i++)
  1245.             if (ruleTriple[i] != null)
  1246.                 ruleTriple[i].Assignment = newVal;
  1247.         _ruleList.innerHTML = GetRuleList();
  1248.     } catch (e)
  1249.     {
  1250.         alert("Access violation");
  1251.     }
  1252. }
  1253.  
  1254. function GenerateAccessResultCombo(rule, prio, accessType, strOnChange)
  1255. {
  1256.     var strARList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1257.     var i, iCurAR;    // access result set for this rule and access type
  1258.     if (rule != null)
  1259.     {
  1260.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1261.  
  1262. // find access descriptor for this access type
  1263.         var adList = rule.AccessDescriptorList;
  1264.         var adEnum = new Enumerator(adList);
  1265.         adEnum.moveFirst();
  1266.         var accessDescriptor = null;
  1267.         while (!adEnum.atEnd())
  1268.         {
  1269.             var acCur = adEnum.item();
  1270.             if (acCur.AccessType == accessType)
  1271.             {
  1272.                 accessDescriptor = acCur;
  1273.                 break;
  1274.             }
  1275.             adEnum.moveNext();
  1276.         }
  1277.         if (accessDescriptor == null)
  1278.             iCurAR = AR_ALLOW;
  1279.         else
  1280.             iCurAR = accessDescriptor.AccessResult;
  1281.     } else
  1282.         iCurAR = AR_ALLOW;
  1283.  
  1284.     for (i = AR_PREVENT; i <= AR_ASKUSER; i++)
  1285.     {
  1286.         if (prio == PRIOR_HIGH && i == AR_ASKUSER)    // AskUser is not available for HighPriority rules
  1287.             continue;
  1288.         strARList += '<OPTION value="' + i + '"';
  1289.         if (i == iCurAR)
  1290.         {
  1291.             strARList += ' selected ';
  1292.         }
  1293.         strARList += '>' + arrAccessResultStrings[i] + '</OPTION>';
  1294.     }
  1295.     strARList += HTML_SELECT_TRAILER;
  1296.     return strARList;
  1297. }
  1298.  
  1299. function GenerateAccessResult(rule, prio, accessType, strOnChange)
  1300. {
  1301.     var strARList = '<A ' + strDisabled[prio];
  1302.     if (strDisabled[prio] == '')
  1303.         strARList += ' onclick=' + strOnChange;
  1304.     strARList += '>';
  1305.     var i, iCurAR;    // access result set for this rule and access type
  1306.     if (rule != null)
  1307.     {
  1308.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1309.  
  1310. // find access descriptor for this access type
  1311.         var adList = rule.AccessDescriptorList;
  1312.         var adEnum = new Enumerator(adList);
  1313.         adEnum.moveFirst();
  1314.         var accessDescriptor = null;
  1315.         while (!adEnum.atEnd())
  1316.         {
  1317.             var acCur = adEnum.item();
  1318.             if (acCur.AccessType == accessType)
  1319.             {
  1320.                 accessDescriptor = acCur;
  1321.                 break;
  1322.             }
  1323.             adEnum.moveNext();
  1324.         }
  1325.         if (accessDescriptor == null)
  1326.             iCurAR = AR_ALLOW;
  1327.         else
  1328.             iCurAR = accessDescriptor.AccessResult;
  1329.     } else
  1330.         iCurAR = AR_ALLOW;
  1331.  
  1332.     strARList += '<IMG src="' + arrARImgSrc[iCurAR] + '" title="' + arrARTitles[iCurAR] + '"></IMG>';
  1333.     strARList += '</A>';
  1334.     return strARList;
  1335. }
  1336.  
  1337. function GenerateAuditLevel(rule, prio, accessType, strOnChange)
  1338. {
  1339.     var strALList = '<A ' + strDisabled[prio];
  1340.     if (strDisabled[prio] == '')
  1341.         strALList += ' onclick=' + strOnChange;
  1342.     strALList += '>';
  1343.     var i, iCurAL;    // access result set for this rule and access type
  1344.     if (rule != null)
  1345.     {
  1346.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1347.  
  1348. // find access descriptor for this access type
  1349.         var adList = rule.AccessDescriptorList;
  1350.         var adEnum = new Enumerator(adList);
  1351.         adEnum.moveFirst();
  1352.         var accessDescriptor = null;
  1353.         while (!adEnum.atEnd())
  1354.         {
  1355.             var acCur = adEnum.item();
  1356.             if (acCur.AccessType == accessType)
  1357.             {
  1358.                 accessDescriptor = acCur;
  1359.                 break;
  1360.             }
  1361.             adEnum.moveNext();
  1362.         }
  1363.         if (accessDescriptor == null)
  1364.             iCurAL = AL_IGNORE;
  1365.         else
  1366.             iCurAL = accessDescriptor.AuditLevel;
  1367.     } else
  1368.         iCurAL = AL_IGNORE;
  1369.  
  1370.     strALList += '<IMG src="' + arrALImgSrc[iCurAL] + '" title="' + arrALTitles[iCurAL] + '"></IMG>';
  1371.     strALList += '</A>';
  1372.     return strALList;
  1373. }
  1374.  
  1375. function GenerateVBAAccessResult(rule, prio, macroOrAuto, strOnChange)
  1376. {
  1377.     var strARList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1378.     var i, iCurOption;
  1379.     if (rule != null)
  1380.     {
  1381.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1382.  
  1383. // find access descriptor for this access type
  1384.         var adList = rule.AccessDescriptorList;
  1385.         var adEnum = new Enumerator(adList);
  1386.         adEnum.moveFirst();
  1387.         var accessDescriptor = null;
  1388.         iCurOption = 2;
  1389.         while (!adEnum.atEnd())
  1390.         {
  1391.             var acCur = adEnum.item();
  1392.             var atCur = acCur.AccessType;
  1393.             if (    macroOrAuto &&     (atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1394.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  1395.                 !macroOrAuto && (atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  1396.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  1397.             {
  1398.                 accessDescriptor = acCur;
  1399.                 if (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  1400.                     atCur == AT_VBA_AUTO_RUN_IN_ORIG )
  1401.                 {
  1402.                     if (acCur.AccessResult == AR_ALLOW)
  1403.                     {
  1404.                         iCurOption = 0;
  1405.                         break;
  1406.                     }
  1407.  
  1408.                 }
  1409.                 if (    atCur == AT_VBA_MACRO_RUN_IN_SPECIAL ||
  1410.                     atCur == AT_VBA_AUTO_RUN_IN_SPECIAL )
  1411.                 {
  1412.                     if (acCur.AccessResult == AR_ALLOW)
  1413.                     {
  1414.                         iCurOption = 1;
  1415.                         break;
  1416.                     }
  1417.                 }
  1418.             }
  1419.             adEnum.moveNext();
  1420.         }
  1421.         if (accessDescriptor == null)
  1422.             iCurOption = 0;
  1423.     } else
  1424.         iCurOption = 0;
  1425.  
  1426.     for (i = 0; i <= 2; i++)
  1427.     {
  1428.         strARList += '<OPTION value="' + i + '"';
  1429.         if (i == iCurOption)
  1430.         {
  1431.             strARList += ' selected ';
  1432.         }
  1433.         strARList += '>' + arrVBAOptions[i] + '</OPTION>';
  1434.     }
  1435.     strARList += HTML_SELECT_TRAILER;
  1436.     return strARList;
  1437. }
  1438.  
  1439. function GenerateShutdownAuditLevel(rule, prio, accessType, strOnChange)
  1440. {
  1441.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1442.     var i, iCurAL;    // access result set for this rule and access type
  1443.     if (rule != null)
  1444.     {
  1445.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1446.  
  1447. // find access descriptor for this access type
  1448.         var adList = rule.AccessDescriptorList;
  1449.         var adEnum = new Enumerator(adList);
  1450.         adEnum.moveFirst();
  1451.         var accessDescriptor = null;
  1452.         while (!adEnum.atEnd())
  1453.         {
  1454.             var acCur = adEnum.item();
  1455.             if (acCur.AccessType == accessType)
  1456.             {
  1457.                 accessDescriptor = acCur;
  1458.                 break;
  1459.             }
  1460.             adEnum.moveNext();
  1461.         }
  1462.         if (accessDescriptor == null)
  1463.             iCurAL = AL_IGNORE;
  1464.         else
  1465.             iCurAL = accessDescriptor.AuditLevel;
  1466.     } else
  1467.         iCurAL = AL_IGNORE;
  1468.  
  1469.     for (i = AL_IGNORE; i <= AL_MONITOR; i++)
  1470.     {
  1471.         strALList += '<OPTION value="' + i + '"';
  1472.         if (i == iCurAL)
  1473.         {
  1474.             strALList += ' selected ';
  1475.         }
  1476.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1477.     }
  1478.     strALList += HTML_SELECT_TRAILER;
  1479.     return strALList;
  1480. }
  1481.  
  1482. function GenerateAuditLevelCombo(rule, prio, accessType, strOnChange)
  1483. {
  1484.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1485.     var i, iCurAL;    // access result set for this rule and access type
  1486.     if (rule != null)
  1487.     {
  1488.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1489.  
  1490. // find access descriptor for this access type
  1491.         var adList = rule.AccessDescriptorList;
  1492.         var adEnum = new Enumerator(adList);
  1493.         adEnum.moveFirst();
  1494.         var accessDescriptor = null;
  1495.         while (!adEnum.atEnd())
  1496.         {
  1497.             var acCur = adEnum.item();
  1498.             if (acCur.AccessType == accessType)
  1499.             {
  1500.                 accessDescriptor = acCur;
  1501.                 break;
  1502.             }
  1503.             adEnum.moveNext();
  1504.         }
  1505.         if (accessDescriptor == null)
  1506.             iCurAL = AL_IGNORE;
  1507.         else
  1508.             iCurAL = accessDescriptor.AuditLevel;
  1509.     } else
  1510.         iCurAL = AL_IGNORE;
  1511.  
  1512.     for (i = AL_IGNORE; i <= AL_ALERT; i++)
  1513.     {
  1514.         strALList += '<OPTION value="' + i + '"';
  1515.         if (i == iCurAL)
  1516.         {
  1517.             strALList += ' selected ';
  1518.         }
  1519.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1520.     }
  1521.     strALList += HTML_SELECT_TRAILER;
  1522.     return strALList;
  1523. }
  1524.  
  1525. function GenerateVBAAuditLevel(rule, prio, macroOrAuto, strOnChange)
  1526. {
  1527.     var strALList = HTML_SELECT_HEADER + strDisabled[prio] + ' onchange=' + strOnChange + '>';
  1528.     var i, iCurAL;    // access result set for this rule and access type
  1529.     if (rule != null)
  1530.     {
  1531.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1532.  
  1533. // find access descriptor for this access type
  1534.         var adList = rule.AccessDescriptorList;
  1535.         var adEnum = new Enumerator(adList);
  1536.         adEnum.moveFirst();
  1537.         var accessDescriptor = null;
  1538.         while (!adEnum.atEnd())
  1539.         {
  1540.             var acCur = adEnum.item();
  1541.             var atCur = acCur.AccessType;
  1542.             if (macroOrAuto &&     (acCur.AccessType == AT_VBA_MACRO_RUN_IN_ORIG ||
  1543.                         acCur.AccessType == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  1544.                 !macroOrAuto &&     (acCur.AccessType == AT_VBA_AUTO_RUN_IN_ORIG ||
  1545.                         acCur.AccessType == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  1546.             {
  1547.                 accessDescriptor = acCur;
  1548.                 break;
  1549.             }
  1550.             adEnum.moveNext();
  1551.         }
  1552.         if (accessDescriptor == null)
  1553.             iCurAL = AL_IGNORE;
  1554.         else
  1555.             iCurAL = accessDescriptor.AuditLevel;
  1556.     } else
  1557.         iCurAL = AL_IGNORE;
  1558.  
  1559.     for (i = AL_IGNORE; i <= AL_MONITOR; i++)
  1560.     {
  1561.         strALList += '<OPTION value="' + i + '"';
  1562.         if (i == iCurAL)
  1563.         {
  1564.             strALList += ' selected ';
  1565.         }
  1566.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1567.     }
  1568.     strALList += HTML_SELECT_TRAILER;
  1569.     return strALList;
  1570. }
  1571.  
  1572. function ChangeApplication(ruleTriple, appNew)
  1573. {
  1574.     var i;
  1575.     for (i = 0; i < 3; i++)
  1576.     {
  1577.         if (ruleTriple[i] != null)
  1578.             ruleTriple[i].Application = appNew;
  1579.         SetRuleTripleAppType(ruleTriple, arrLabelTypes[appNew]);
  1580.     }
  1581. }
  1582.  
  1583. function SetRuleID(rule, type, value, bIsServer)
  1584. {
  1585.     var ruleId = value | bIsServer<<16 | arrGuardIds[type]<<24;
  1586.     rule.RuleID = ruleId;
  1587. }
  1588.  
  1589. function SetRuleIDFromTriple(subindex, ruleTriple, bIsServer)
  1590. {
  1591.     var i, id = 0;
  1592.     for (i = 0; i < 3; i++)
  1593.         if (subindex != i  &&  ruleTriple[i] != null)
  1594.         {
  1595.             id = ruleTriple[i].RuleID & 0x0000ffff;
  1596.             break;
  1597.         }
  1598.     var ruleId = id | bIsServer<<16 | arrGuardIds[subindex]<<24;
  1599.     ruleTriple[subindex].RuleID = ruleId;
  1600. }
  1601.  
  1602. function SetRuleTripleID(ruleTriple, id, bIsServer)
  1603. {
  1604.     var i;
  1605.     for (i = 0; i < 3; i++)
  1606.     {
  1607.         var ruleId = arrGuardIds[i]<<24 | bIsServer<<16 | id;
  1608.         if (ruleTriple[i] != null)
  1609.             ruleTriple[i].RuleID = ruleId;
  1610.     }
  1611. }
  1612.  
  1613. function SetRuleTripleAppType(ruleTriple, appType)
  1614. {
  1615.     var i;
  1616.     for (i = 0; i < 3; i++)
  1617.     {
  1618.         if (ruleTriple[i] != null)
  1619.             ruleTriple[i].AppType = appType;
  1620.     }
  1621. }
  1622.  
  1623. function CreateRule(index, subindex, priority)
  1624. {
  1625.     var ruleList, ruleTriple = arrRuleTriples[index];
  1626.     var strApp = "", iAppType = 0, strAssignment = "";
  1627.     var i;
  1628.     switch(priority)
  1629.     {
  1630.     case PRIOR_LOW:
  1631.     case PRIOR_HIGH:
  1632.         ruleList = ServerRuleList;
  1633.         break;
  1634.     case PRIOR_NORMAL:
  1635.         ruleList = ClientRuleList;
  1636.         break;
  1637.     }
  1638.  
  1639.     for (i = 0; i < 3; i++)
  1640.         if (ruleTriple[i] != null)
  1641.         {
  1642.             strApp = ruleTriple[i].Application;
  1643.             iAppType = ruleTriple[i].AppType;
  1644.             strAssignment = ruleTriple[i].Assignment;
  1645.         }
  1646.     if (strApp == "")
  1647.     {
  1648.         alert("Failed to create rule");
  1649.         return;
  1650.     }
  1651.     var ruleNew = ruleList.CreateRule();
  1652.     ruleNew.Application = strApp;
  1653.     ruleNew.AppType = iAppType;
  1654.     switch (subindex)
  1655.     {
  1656.     case 0:
  1657.         ruleNew.ObjectType = OT_VBAMACRO;
  1658.         break;
  1659.     case 1:
  1660.         ruleNew.ObjectType = OT_SYSTEMPRIV;
  1661.         break;
  1662.     case 2:
  1663.         ruleNew.ObjectType = OT_DEVICEPRIV;
  1664.         break;
  1665.     }
  1666.     ruleNew.Priority = priority;
  1667.     ruleNew.Path = "*";
  1668.     ruleNew.PathType = RT_DEFINITION;
  1669.     ruleNew.Assignment = strAssignment;
  1670.     ruleList.Insert(ruleNew, ruleNew);
  1671.     ruleTriple[subindex] = ruleNew;
  1672.     SetRuleIDFromTriple(subindex, ruleTriple, (priority == PRIOR_HIGH || priority == PRIOR_LOW) ? 1 : 0);
  1673.     return ruleNew;
  1674. }
  1675.  
  1676. function AddToAssignment()
  1677. {
  1678.     ctrlAsgnmt.AddFromSBXList(OT_VBAMACRO, ClientParser, ServerParser, ClientAppParser, ServerAppParser );
  1679.     _ruleList.innerHTML = GetRuleList();
  1680. }
  1681.